package telas.produto;

import java.util.ArrayList;
import java.util.List;
import business.dados.Persistente;
import business.produto.Empresa;
import business.produto.Fabricante;
import business.produto.Produto;
import business.sistema.ExceptionSistema;
import business.sistema.IObjetoSistema;
import telas.web.TelaPesquisa;

public class TelaProduto extends TelaPesquisa
{
	private String nomeProduto = "";
	private Fabricante fabricanteSelecionado = new Fabricante();
	private List<IObjetoSistema> fabricantes = new ArrayList<IObjetoSistema>();
	private String nomeFabricantePesquisa = "";
	private Empresa empresaSelecionado = new Empresa();
	private List<IObjetoSistema> empresas = new ArrayList<IObjetoSistema>();
	private String nomeEmpresaPesquisa = "";
	private boolean objetoEditado;

	// ############################################# 
	//  MÉTODOS DE INTERFACE PARA IMPLEMENTAR A BUSCA POR UM FABRICANTE
	// #############################################	
	public void setFabricanteSelecionado(Fabricante fabricanteSelecionado)
	{
		this.fabricanteSelecionado = fabricanteSelecionado;
	}

	public Fabricante getFabricanteSelecionado()
	{
		return fabricanteSelecionado;
	}
	
	public void setFabricantes(List<IObjetoSistema> fabricantes)
	{
		this.fabricantes = fabricantes;
	}

	public List<IObjetoSistema> getFabricantes()
	{
		return fabricantes;
	}

	public void setNomeFabricantePesquisa(String nomeFabricantePesquisa)
	{
		this.nomeFabricantePesquisa = nomeFabricantePesquisa;
	}

	public String getNomeFabricantePesquisa()
	{
		return nomeFabricantePesquisa;
	}
	
	public String pesquisarFabricante() 
	{
		try
		{
			setFabricantes(Persistente.getInstance().getCollection(Fabricante.class, filtroFabricante()));
		}
		catch(Exception ex)
		{
			new ExceptionSistema(ex);
		}
		
		return null;
	}
	
	public String filtroFabricante()
	{
		StringBuilder filtro = new StringBuilder(" 1 = 1");
		
		filtro.append(" AND this_.nome LIKE '%" + nomeFabricantePesquisa + "%' ");
		
		filtro.append(" ORDER BY this_.nome ");
		
		return filtro.toString();
	}
	
	// ############################################# 
	// FIM - PESQUISA FABRICANTE
	// #############################################
	
	// ############################################# 
	//  MÉTODOS DE INTERFACE PARA IMPLEMENTAR A BUSCA POR UMA EMPRESA
	// #############################################	
	
	public void setEmpresaSelecionado(Empresa empresaSelecionado)
	{
		this.empresaSelecionado = empresaSelecionado;
	}

	public Empresa getEmpresaSelecionado()
	{
		return empresaSelecionado;
	}
	
	public void setEmpresas(List<IObjetoSistema> empresas)
	{
		this.empresas = empresas;
	}

	public List<IObjetoSistema> getEmpresas()
	{
		return empresas;
	}
	
	public void setNomeEmpresaPesquisa(String nomeEmpresaPesquisa)
	{
		this.nomeEmpresaPesquisa = nomeEmpresaPesquisa;
	}

	public String getNomeEmpresaPesquisa()
	{
		return nomeEmpresaPesquisa;
	}
	
	public String pesquisarEmpresa() 
	{
		try
		{
			setEmpresas(Persistente.getInstance().getCollection(Empresa.class, filtroEmpresa()));
		}
		catch(Exception ex)
		{
			new ExceptionSistema(ex);
		}
		
		return null;
	}
	
	public String filtroEmpresa()
	{
		StringBuilder filtro = new StringBuilder(" 1 = 1");
		
		filtro.append(" AND this_.nome LIKE '%" + nomeEmpresaPesquisa + "%' ");
		
		filtro.append(" ORDER BY this_.nome ");
		
		return filtro.toString();
	}
	
	// ############################################# 
	// FIM - PESQUISA EMPRESA
	// #############################################

	public void setNomeProduto(String nomeProduto)
	{
		this.nomeProduto = nomeProduto;
	}

	public String getNomeProduto()
	{
		return nomeProduto;
	}
	
	@Override
	public List<IObjetoSistema> getListaObjetos()
	{
		
		if(isObjetoEditado())
		{
			pesquisar();
			objetoEditado = false;
		}
		
		return super.getListaObjetos();
	}
	
	@Override
	public String pesquisar()
	{
		try
		{
			setListaObjetos(Persistente.getInstance().getCollection(Produto.class, filtro()));
		}
		catch (Exception ex) 
		{
			new ExceptionSistema(ex);
		}
		
		return null;
	}
	
	private String filtro()
	{
		StringBuilder filtro = new StringBuilder(" 1 = 1 ");
		
		if((fabricanteSelecionado != null) && (fabricanteSelecionado.getCodigo() > 0))
		{
			filtro.append(" AND this_.codigo_fabricante = " + fabricanteSelecionado.getCodigo());
		}
		
		filtro.append(" AND this_.nome LIKE '%" + nomeProduto + "%' ");
		
		filtro.append(" ORDER BY this_.nome ");
		
		return filtro.toString(); 
	}

	public void setObjetoEditado(boolean objetoEditado)
	{
		this.objetoEditado = objetoEditado;
	}

	public boolean isObjetoEditado()
	{
		return objetoEditado;
	}
}
